package _1_String;

public class A67_strToInt {
    public int strToInt(String str) {
        char[] c = str.trim().toCharArray();
        //长度为0就返回
        if(c.length == 0) return 0;
        //bndry是边界的意思
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        //sign代表符号位,默认是正数1
        int i = 1, sign = 1;
        //当符号位为负sign被标记为-1
        if(c[0] == '-') sign = -1;
        //当符号位不是正数就sign标记为0，最后return的时候*0就是0
        else if(c[0] != '+') i = 0;

        for(int j = i; j < c.length; j++) {
            //出现不是数字就返回报错
            if(c[j] < '0' || c[j] > '9') break;
            //这个判断挺巧妙的
            //2147483647  bndry:214748364  214748364
            if(res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (c[j] - '0');
        }
        return sign * res;
    }
}
